define(function(require, exports, module) {
  var $ = require("$");
  var dtUtil = require('datatableutil');
  require("bootstrap_commonrequire");
  require('select2.css');
  require('select2');
  require('highcharts');
  require('highcharts.exporting');
  var store = require('store');
  var loader = require("./loader/loader");

  exports.init = function(param) {

    $(document).ready(
        function() {
          // 蒙版
          loader.loading("数据加载中，请稍后……");
          // 加载自定义模板-条件区域
          var isSystemAdmin = (store.get("userInfo").userType == -1);
          var tplattrs = {};
          tplattrs.isSystemAdmin = isSystemAdmin;

          var template = require("./countdurationpeople.tpl");
          var Widget = require("widget");
          var Component = Widget.extend({
            template : template
          });

          var selectTime = "myDay";
          // 图表区
          // 将查询出来的内容赋值给图表区
          var dataChart = {};
          // 记录日期栏中的开始/结束时间
          var startTimeSelect = "";
          var endTimeSelect = "";

          new Component({
            attrs : tplattrs,
            renderTo : queryAreaId
          });

          // 获取查询条件
          function getCondition() {

            var isvid = $('#isvName').val();

            var applyid = $('#applyName').val();

            // 企业名称
            var carrierid = $('#carrierid').val();

            var queryStr = "";
            if (carrierid != '' && carrierid != null) {
              queryStr += ("tmi.company_id=" + carrierid + ";");
            }

            if (isvid != '' && isvid != null) {
              queryStr += ("tmi.isv_id=" + isvid + ";");
            }

            if (applyid != '' && applyid != null) {
              queryStr += ("tmi.app_id=" + applyid + ";");
            }

            var daterange = daterangeCom.getPickerRange();
            if (daterange) {
              var daterange = daterange.split("/");
              // 只获取起始或截止的那一天的时间，这样可以确保是一天
              var startTime = daterange[0];
              startTimeSelect = daterange[0];
              var endTime = daterange[1];
              endTimeSelect = daterange[1];
              queryStr += ("tmi.create_time BETWEEN '" + startTime + " 00:00:00' AND '" + endTime + " 23:59:59'" + ";");
            }
            
            selectTime = $('#statisticstype').val();// 选择的时间，字符串型
            
            return queryStr;
          }

          // 绑定企业名称下拉列表
          $("#ddlCarrierid").select2({
            placeholder : "企业名称",
            allowClear : true,
            formatNoMatches : "没有匹配的企业",
            ajax : {
              url : GLOBAL.URL.ADMIN_GETCARRIEROPTIONS,
              dataType : 'json',
              delay : 250,
              data : function(term, pageNo) {
                return {
                  q : " c.name like '%" + term + "%' ", // search term
                  appid : $("#applyName").val(),
                  size : 25,
                  start : (pageNo - 1) * 25
                };
              },
              results : function(data, pageNo) {
                var dataObj = eval(data);
                return {
                  results : dataObj
                };
              },
              cache : true
            }
          });

          // 绑定isv名称下拉列表
          $.ajax({
            type : "POST",
            dataType : "json",
            url : "/user/queryIsv.do",// GLOBAL.URL.ADMIN_GETCARRIEROPTIONS,//
                                          // wp.huang
            async : false,
            success : function(data) {
              $("#isvName").select2({
                placeholder : "ISV名称",
                allowClear : true,
                data : data
              });
            },
            error : function(data) {
              bootbox.alertTimeout('初始化ISV名称数据失败！');
            }
          });

          // 绑定应用下拉列表
          $.ajax({
            type : "POST",
            dataType : "json",
            url : "/condition/applyName.do",// /GLOBAL.URL.GETAPPLYTYPELIST,
                                            // ////wp.huang
            async : false,
            // data: "isvid="+$('#isvName').val(),

            success : function(data) {
              $("#applyName").select2({
                placeholder : "应用名称",
                allowClear : true,
                data : data
              });
            },
            error : function(data) {
              bootbox.alertTimeout('初始化应用名称数据失败！');
            }
          });

          // 统计方式
          var typeList = [ {
            "id" : "myYear",
            "text" : "年"
          }, {
            "id" : "myMonth",
            "text" : "月"
          }, {
            "id" : "myDay",
            "text" : "日"
          } ];
          $('#statisticstype').select2({
            placeholder : "统计周期",
            allowClear : true,
            data : typeList
          });

          $("#carrierid").select2({
            placeholder : "企业名称",
            allowClear : true,
            ajax : {
              url : GLOBAL.URL.ADMIN_GETCARRIEROPTIONS,
              dataType : 'json',
              delay : 250,
              data : function(term, pageNo) {
                return {
                  q : " c.name like '%" + term + "%' ", // search term
                  size : 25,
                  start : (pageNo - 1) * 25
                };
              },
              results : function(data, pageNo) {
                var dataObj = eval(data);
                return {
                  results : dataObj
                };
              },
              cache : true
            }
          });

          // 初始化日期范围选择控件
          var DateRange = require('daterangeinput');
          var daterangeAttrs = {
            daterangeId : "querydatewrapper_rang",
            label : "日期"
          };
          var daterangeCom = new DateRange({
            attrs : daterangeAttrs,
            renderTo : 'querydatewrapper'
          });
          daterangeCom.setRangeToToday();

          // 加载表单模板和数据
          var Table = require("table");
          new Table({
            attrs : {
              id : "datatableid",
              isHovered : false,
              isStriped : true,
              isBordered : false
            },
            renderTo : param.divWrapperId

          });

          var datatables = $('#datatableid').dataTable(
              {
                "sDom" : "<'hidden'<'span6'l><'hidden'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
                "bJQueryUI" : false,
                "oLanguage" : {
                  "sUrl" : "/business/js/common/table/src/lang/dataTable.cn.txt"
                },
                "sPaginationType" : "bootstrap", // 分页自带两种样式，full_numbers和two_button(默认)
                'bPaginate' : true, // 是否分页
                "bProcessing" : true, // 当datatable获取数据时候是否显示正在处理提示信息。
                "bServerSide" : true, // 指定服务器端分页
                "bDeferRender" : true,
                "bFilter" : true,
                "bSort" : true,
                "bInfo" : true,
                "sAjaxSource" : "/visits/countDurAndPeo.do", // 数据源
                "iDisplayLength" : 400, // 默认分页的每页记录数DATATABLES_CONFIG.iDisplayLength.DEFAULT为35个
                "fnServerData" : function(sSource, aoData, fnCallback, oSettings) {
                  var queryparam = dtUtil.convert_aoData(aoData);

                  // 拼接where查询条件
                  var cond = getCondition();
                  if (cond != '' && cond != null) {
                    queryparam.q += cond;
                  }
                  queryparam.mySelectTime = selectTime;

                  // 添加自己的额外参数
                  oSettings.jqXHR = $
                      .ajax({
                        "dataType" : 'json',
                        "contentType" : "application/json;charset=UTF-8",
                        "type" : "GET",
                        "url" : sSource,
                        "data" : queryparam, // 将请求数据转换为后台要求的JSON格式
                        "success" : function(json) {
                          // 隐藏蒙版
                          loader.noloading();
                          dtUtil.successCallback(json, aoData, fnCallback);
                          dataChart = json;
                          // 获取拼接成json串
                          var jsondata = dataChart.data;
                          // 获取data中的items属性
                          var itemsPro = jsondata.items;

                          // 限制X轴数据显示个数，可将其放入tickInterval或step中
                          var myInterval = 1;
                          if(itemsPro.length>10&&itemsPro.length<=18){
                            myInterval = 2;
                          }else if(itemsPro.length>18&&itemsPro.length<=24){
                            myInterval = 3;
                          }else if(itemsPro.length>=25&&itemsPro.length<=50){
                            myInterval = 5;
                          }else if(itemsPro.length>50&&itemsPro.length<=100){
                            myInterval = 10;
                          }else if(itemsPro.length>100&&itemsPro.length<=200){
                            myInterval = 20;
                          }else if(itemsPro.length>200&&itemsPro.length<=400){
                            myInterval = 40;
                          }
                          
                          var strDuration = [];// 通话时长
                          var strPeople = [];// 通话总人数
                          var strTime = [];// 日期
                          // 格式化数据
                          for(var i=0;i<itemsPro.length;i++){
                            var bean = itemsPro[i];
                            var durationFixed = parseFloat(bean.total_duration/bean.today_num).toFixed(2);
                            var peopleFixed = parseFloat(bean.total_people/bean.today_num).toFixed(2);
                            strDuration.push(parseFloat(durationFixed));
                            strPeople.push(parseFloat(peopleFixed));
                            strTime.push(bean.this_time);
                          }
                          
                          new Highcharts.Chart({
                            chart: {
                              //图表放置的容器，DIV
                               renderTo: 'container1',
                               //图表类型area(区域图)
                               type: 'area',
                               //x轴方向可以缩放 
                               zoomType: 'x',
                               //让放大的动画平滑些
                               animation: Highcharts.svg 
                            },
                            credits: { 
                            //右下角不显示LOGO (HighCharts.com)
                               enabled: false
                            }, 
                            title: {
                               text: '统计图表：' + startTimeSelect + '~' + endTimeSelect
                            },
                            xAxis: {
                               //x轴标签名称
                               // 是否允许刻度有小数
                               allowDecimals: false,
                               tickInterval : myInterval,//X轴方向数据显示间隔，即每隔tickInterval个值才显示一个数据
                               categories: strTime,
                               labels: {
                                  // step : myInterval,//X轴方向数据显示步长，即每隔step个值才显示一个数据
                                  style: {
                                     y:26,//x轴标签位置：距X轴下方26像素 
                                     // 'color': 'red',//刻度颜色
                                     'fontSize':'14px' //刻度字体大小
                                  },
                                  formatter: function () {  
                                     return this.value;
                                  }
                               }
                            },
                            yAxis: {
                               min : 0,// 不显示负数
                               allowDecimals : true, // 是否允许刻度有小数
                               title: {
                                  text: '各种数据',//标题 
                                  style: {
                                    'color': 'red',//刻度颜色
                                    'fontSize':'16px' //刻度字体大小
                                  }
                               },
                               labels: {
                                 style: {
                                   // 'color': 'red',//刻度颜色
                                    'fontSize':'14px' //刻度字体大小
                                 }
                               }
                            },
                            exporting: { 
                              enabled: true,  //设置导出按钮可用 
                              filename:'dudu.zonghehuadan',//导出的文件名，暂时不能为中文，"嘟嘟图表"dudu.chart
                              sourceWidth:1500,//导出的文件宽度
                              sourceHeight:600//导出的文件高度
                            },
                            plotOptions: {
                              area: {
                                  marker: {
                                      enabled: false,
                                      symbol: 'circle',
                                      radius: 2,
                                      states: {
                                          hover: {
                                              enabled: true
                                          }
                                      }
                                  }
                              }
                            },
                            series: [ {
                              name: '平均每个会议的通话时长(分钟)',
                              data: strDuration
                            }, {
                              name: '平均每个会议的通话总人数',
                              data: strPeople
                            } ]
                          });

                        }
                      });
                },
                "aoColumns" : [ {
                  "sTitle" : "日期",
                  "bSortable" : false,
                  "mData" : "this_time",
//                  "sWidth" : "18%"
                }, {
                  "sTitle" : "通话时长",
                  "bSortable" : false,
                  "mData" : "total_duration"
                }, {
                  "sTitle" : "通话总人数",
                  "bSortable" : false,
                  "mData" : "total_people"
                } ],
                "fnDrawCallback" : function(oSettings) {
                  // 表格绘制完成后，去除width属性，使表格可缩放
                  $('#' + oSettings.sTableId).css("width", "");
                }
              });

          // 统计图表按钮
          $('#btnchart').click(function() {
            //蒙版
            loader.loading("数据加载中，请稍后……");
            datatables.fnFilter();
            return false;
          });

          //重置查询条件
          $('#btnreset').click(function() {
            //蒙版
            loader.loading("数据加载中，请稍后……");
            $("#isvName").select2("val", "");
            $("#applyName").select2("val", "");
            daterangeCom.setRangeToToday();
            $("#carrierid").select2("val", "");
            $("#statisticstype").select2("val", "");
            datatables.fnFilter();
            return false;
          });

        });

  };
});
